package ConnectivityEditor.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.TableEditor; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import Command.LDrawPart; import Connectivity.Connectivity; import Connectivity.ICustom2DField; import Connectivity.MatrixItem; import ConnectivityEditor.Connectivity.ConnectivityGenerator; import ConnectivityEditor.Connectivity.HoleT; import ConnectivityEditor.Connectivity.StudT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.layout.RowData; public class HoleEditorComposite extends Composite { private Table table; private Combo combo_nColumns; private Combo combo_nRows; /** * Create the composite. * * @param parent * @param style */ public HoleEditorComposite(Composite parent, int style) { super(parent, SWT.NONE); RowLayout rowLayout = new RowLayout(SWT.VERTICAL); rowLayout.center = true; setLayout(rowLayout); Group group = new Group(this, SWT.NONE); group.setLayoutData(new RowData(224, 52)); combo_nColumns = new Combo(group, SWT.READ_ONLY); combo_nColumns.setLocation(10, 31); combo_nColumns.setSize(90, 23); combo_nColumns.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent arg0) { generateTableContents(); } }); Label lblNewLabel = new Label(group, SWT.NONE); lblNewLabel.setLocation(110, 10); lblNewLabel.setSize(38, 15); lblNewLabel.setText("# Rows"); combo_nRows = new Combo(group, SWT.READ_ONLY); combo_nRows.setLocation(108, 32); combo_nRows.setSize(90, 23); combo_nRows.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent arg0) { generateTableContents(); } }); Label lblColumn = new Label(group, SWT.NONE); lblColumn.setBounds(10, 10, 53, 15); lblColumn.setText("# Column"); for (int i = 1; i < 20; i++) combo_nColumns.add("" + i); for (int i = 1; i < 20; i++) combo_nRows.add("" + i); combo_nRows.select(0); combo_nColumns.select(0); table = new Table(this, SWT.BORDER | SWT.FULL_SELECTION); table.setHeaderVisible(false); table.setLinesVisible(true); Button btnGenerate = new Button(this, SWT.NONE); btnGenerate.setLayoutData(new RowData(96, 47)); btnGenerate.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent arg0) { handleGenerateStud(); } }); btnGenerate.setText("Generate"); generateTableContents(); } protected void handleGenerateStud() { int nColumns = Integer.parseInt(combo_nColumns.getText()); int nRows = Integer.parseInt(combo_nRows.getText()); HoleT[][] types = new HoleT[nColumns][nRows]; for (int row = 0; row < nRows; row++) { TableItem tableItem = table.getItem(row); for (int column = 0; column < nColumns; column++) { types[column][row] = HoleT.valueOf(((CCombo) tableItem.getData("" + column)).getText()); } } Connectivity newConn = ConnectivityGenerator.getInstance() .generateHole(nColumns, nRows, types); newConn.setParent(ConnectivityEditor.getInstance().getWorkingPart()); MatrixItem[][] matrixItmes = ((ICustom2DField) newConn).getMatrixItem(); for (int column = 0; column < matrixItmes.length; column++) for (int row = 0; row < matrixItmes[column].length; row++) { matrixItmes[column][row].setParent(newConn); matrixItmes[column][row].setColumnIndex(column); matrixItmes[column][row].setRowIndex(row); } ConnectivityEditor.getInstance().addConnectivity(newConn); } private void generateTableContents() { table.setVisible(false); table.setRedraw(false); while (table.getColumnCount() > 0) { table.getColumns()[0].dispose(); } table.removeAll(); int nColumns = Integer.parseInt(combo_nColumns.getText()); int nRows = Integer.parseInt(combo_nRows.getText()); for (int j = 0; j < nColumns; j++) { final TableColumn column = new TableColumn(table, SWT.NULL); column.setWidth(80); } for (int i = 0; i < nRows; i++) { final TableItem item = new TableItem(table, SWT.NULL); for (int j = 0; j < nColumns; j++) { CCombo combo = new CCombo(table, SWT.READ_ONLY); for(HoleT type : HoleT.values()) combo.add(type.toString()); combo.select(0); combo.pack(); TableEditor editor = new TableEditor(table); editor.grabHorizontal = true; editor.setEditor(combo, item, j); item.setData("" + j, combo); } item.setData("nColumns", new Integer(nColumns)); item.addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent arg0) { for (int i = 0; i < (Integer) (item.getData("nColumns")); i++) { ((CCombo) (item.getData("" + i))).dispose(); } } }); } table.pack(); table.setRedraw(true); table.setVisible(true); table.redraw(); this.pack(); this.layout(); } @Override protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } }